#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
typedef pair<int,int>P;
int T,n,m,q,x,y,z,p,i,j,lev[N];
vector<int>e[N],op[N];
bool ans[N];
struct atom{
	int l,r,d;
	inline bool operator<(const atom&rhs)const{return r-d<rhs.r-rhs.d;}
};
set<atom>se1[N];map<int,P>se2[N];map<int,int>se3[N];
int tg2[N],tg3[N];
int sz[N],ma[N],anc[20][N],dep[N];
void dfs1(int x,int fa){
	sz[x]=1;anc[0][x]=fa;dep[x]=dep[fa]+1;
	for(int y:e[x])if(y!=fa)dfs1(y,x),sz[x]+=sz[y],sz[y]>sz[ma[x]]?ma[x]=y:0;
}
inline int lca(int x,int y){
	if(dep[x]>dep[y])swap(x,y);
	int dt=dep[y]-dep[x],i;
	for(i=0;1<<i<=dt;++i)if(dt>>i&1)y=anc[i][y];if(x==y)return x;
	for(i=19;i>=0;--i)if(anc[i][x]!=anc[i][y])x=anc[i][x],y=anc[i][y];
	return anc[0][x];
}
int g[N*2],gv[N*2];
int gfa(int x){return g[x]==x?x:g[x]=gfa(g[x]);}
struct node{int l,r,v,d;}t[N];
int merge(int x,int y){
	if(!x || !y)return x|y;
	if(gv[gfa(t[x].v+q)]>gv[gfa(t[y].v+q)])swap(x,y);t[x].r=merge(t[x].r,y);
	if(t[t[x].l].d<t[t[x].r].d)swap(t[x].l,t[x].r);
	t[x].d=t[t[x].r].d+1;return x;
}
inline void ins2(int x,int v,int i,int ii){
	map<int,P>&s=se2[x];gv[i]=v;
	if(s.count(v))g[i]=s[v].first,s[v].second=merge(s[v].second,ii);else s[v]={i,ii};
	int&xx=s[v].second;
	for(;xx && gv[gfa(t[xx].v+q)]-tg3[x]<=v-tg2[x];ans[t[xx].v]=1,xx=merge(t[xx].l,t[xx].r));
}
inline void ins3(int x,int v,int i){
	map<int,int>&s=se3[x];gv[i]=v;
	if(s.count(v))g[i]=s[v];else s[v]=i;
}
inline void dec(int x){
	++tg2[x];
	if(!se2[x].empty() && se2[x].begin()->first==tg2[x]-1){
		gv[se2[x].begin()->second.first]=-1;
		se2[x].erase(se2[x].begin());
	}
	--tg3[x];
}
set<atom>::iterator geti(int x,int v){
	auto it=se1[x].lower_bound(atom{v,v,dep[x]});
	if(it!=se1[x].end() && it->l+(it->d-dep[x])>=it->r-(it->d-dep[x])){se1[x].erase(it);return geti(x,v);}
	return it;
}
inline void cut(int x,int l,int r){
	auto it=geti(x,l);
	if(it!=se1[x].end() && it->l+(it->d-dep[x])<=r){
		if(it->l+(it->d-dep[x])<=l){
			if(it->r-(it->d-dep[x])>=r)return;
			l=it->l+(it->d-dep[x]);se1[x].erase(it++);
		}
		for(;it!=se1[x].end() && it->r-(it->d-dep[x])<=r;se1[x].erase(it++));
		if(it!=se1[x].end() && it->l+(it->d-dep[x])<=r)r=it->r-(it->d-dep[x]),se1[x].erase(it);
	}
	se1[x].insert(atom{l,r,dep[x]});
	int u=-1,uu=0,t,tt;
	for(auto it=se2[x].lower_bound(l+tg2[x]);it!=se2[x].end() && it->first<=r+tg2[x];se2[x].erase(it++))
		tie(t,tt)=it->second,u==-1?u=t:(g[u]=t,u=t),uu=merge(uu,tt);
	if(u!=-1)ins2(x,r+tg2[x],u,uu);
	u=-1;
	for(auto it=se3[x].lower_bound(l+tg3[x]);it!=se3[x].end() && it->first<=r+tg3[x];se3[x].erase(it++))
		t=it->second,u==-1?u=t:(g[u]=t,u=t);
	if(u!=-1)ins3(x,l+tg3[x],u);
}
void dfs2(int x,int fa){
	for(int y:e[x])if(y!=fa)dfs2(y,x),dec(y);
	if(y=ma[x])se1[x].swap(se1[y]),se2[x].swap(se2[y]),se3[x].swap(se3[y]),swap(tg2[x],tg2[y]),swap(tg3[x],tg3[y]);
	for(int y:e[x])if(y!=fa){
		for(atom u:se1[y]){
			int dd=u.d-dep[x],l=u.l+dd,r=u.r-dd;if(l>=r)continue;
			cut(x,l,r);
		}
		for(P u:se3[y]){
			int v,i;tie(v,i)=u;v-=tg3[y];
			auto it=geti(x,v);
			if(it!=se1[x].end() && it->l+(it->d-dep[x])<=v)v=it->l+(it->d-dep[x]);
			ins3(x,v+tg3[x],i);
		}
		for(auto u:se2[y]){
			int v,i,ii;v=u.first;tie(i,ii)=u.second;v-=tg2[y];
			auto it=geti(x,v);
			if(it!=se1[x].end() && it->l+(it->d-dep[x])<=v)v=it->r-(it->d-dep[x]);
			ins2(x,v+tg2[x],i,ii);
		}
	}
	if(lev[x])cut(x,0,lev[x]);
	for(int y:op[x]){
		int u=gv[gfa(y)],v=gv[gfa(q+y)]-tg3[x];
		if(u==-1)continue;u-=tg2[x];if(u>=v){ans[y]=1;continue;}
		t[y]=node{0,0,y,1};se2[x][u+tg2[x]].second=merge(se2[x][u+tg2[x]].second,y);
	}
}
int main(){
	freopen("shu.in","r",stdin);freopen("shu.out","w",stdout);
	ios::sync_with_stdio(0);cin.tie(0);
	cin>>n>>m>>q;
	for(i=1;i<=n;++i)e[i].clear(),se1[i].clear(),se2[i].clear(),se3[i].clear(),op[i].clear();
	memset(ans+1,0,q);memset(lev+1,0,n<<2);memset(tg2+1,0,n<<2);memset(tg3+1,0,n<<2);memset(ma+1,0,n<<2);
	for(i=1;i<=q*2;++i)g[i]=i;
	for(i=1;i<n;++i)cin>>x>>y,e[x].push_back(y),e[y].push_back(x);
	dfs1(1,0);for(i=1;i<20;++i)for(j=1;j<=n;++j)anc[i][j]=anc[i-1][anc[i-1][j]];
	for(i=1;i<=q;++i){
		cin>>x>>y>>p;
		z=lca(x,y);if(dep[x]+dep[y]-dep[z]*2<=p){ans[i]=1;continue;}
		op[z].push_back(i);
		ins2(x,p,i,0);
		ins3(y,0,q+i);
	}
	for(i=1;i<=m;++i)cin>>x>>y,lev[x]=max(lev[x],min(y,n));
	dfs2(1,0);
	for(i=1;i<=q;++i)cout<<(ans[i]?"YES":"NO")<<'\n';
	return 0;
}
